package com.ruoyi.huanghefd.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.huanghefd.domain.*;
import com.ruoyi.huanghefd.mapper.*;
import com.ruoyi.huanghefd.service.WorksheetTemplateService;
import com.ruoyi.huanghefd.utils.PageBean;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;

/**
 * 工作票模板 实现服务
 */
@Service
public class WorksheetTemplateServiceImpl extends ServiceImpl<WorksheetTemplateMapper, WorksheetTemplate>
        implements WorksheetTemplateService {

    private static final Logger log = LoggerFactory.getLogger(WorksheetTemplateServiceImpl.class);

    @Resource
    WorksheetTemplateMapper worksheetTemplateMapper;
    @Resource
    WorksheetTemplateCxtMapper worksheetTemplateCxtMapper;
    @Resource
    WorksheetTemplateMeasures1Mapper worksheetTemplateMeasures1Mapper;
    @Resource
    WorksheetTemplateMeasures2Mapper worksheetTemplateMeasures2Mapper;
    @Resource
    WorksheetTemplateMeasures3Mapper worksheetTemplateMeasures3Mapper;
    @Resource
    WorksheetTemplateMeasures4Mapper worksheetTemplateMeasures4Mapper;
    @Resource
    WorksheetTemplateMeasures5Mapper worksheetTemplateMeasures5Mapper;

    @Override
    public AjaxResult addWorksheetTemplate(WorksheetTemplate worksheetTemplate) {
        int result = 0;
        try {
            String strId = UUID.randomUUID().toString().replace("-", "");
//            String strId = worksheetTemplate.getId();
            //插入 工作票模板 主表
            log.info("新增工作票模板-主表开始>>" + worksheetTemplate);
            worksheetTemplate.setId(strId);
            result = worksheetTemplateMapper.insertAll(worksheetTemplate);
            log.info("新增工作票模板-主表结束<<" + result);

            //插入 工作票模板 工作内容明细
            if (!CollectionUtils.isEmpty(worksheetTemplate.getCxt())) {
                List<WorksheetTemplateCxt> cxtList = new ArrayList<>();
                for (WorksheetTemplateCxt cxt : worksheetTemplate.getCxt()) {
                    WorksheetTemplateCxt cxts = new WorksheetTemplateCxt();
                    cxts.setId(strId);
                    cxts.setCid(UUID.randomUUID().toString().replace("-", ""));
                    cxts.setWsType(cxt.getWsType());
                    cxts.setWsOrder(cxt.getWsOrder());
                    cxts.setAddress(cxt.getAddress());
                    cxts.setContent(cxt.getContent());

                    cxtList.add(cxts);
                }
                log.info("新增工作票模板-子表 工作内容明细开始>>" + cxtList);
                result = worksheetTemplateCxtMapper.insertBatch(cxtList);
                log.info("新增工作票模板-子表 工作内容明细开始<<" + result);
            }
            //插入 工作票模板 安全措施1M
            if (!CollectionUtils.isEmpty(worksheetTemplate.getSafetyMeasures1())) {
                List<WorksheetTemplateMeasures1> m1List = new ArrayList<>();
                for (WorksheetTemplateMeasures1 m1 : worksheetTemplate.getSafetyMeasures1()) {
                    WorksheetTemplateMeasures1 m1s = new WorksheetTemplateMeasures1();
                    m1s.setId(strId);
                    m1s.setMid(UUID.randomUUID().toString().replace("-", ""));
                    m1s.setWsType(m1.getWsType());
                    m1s.setWsOrder(m1.getWsOrder());
                    m1s.setSafetyMeasures(m1.getSafetyMeasures());

                    m1List.add(m1s);
                }
                log.info("新增工作票模板-子表 安全措施1明细开始>>" + m1List);
                result = worksheetTemplateMeasures1Mapper.insertBatch(m1List);
                log.info("新增工作票模板-子表 安全措施1明细开始<<" + result);
            }
            //插入 工作票模板 安全措施2
            if (!CollectionUtils.isEmpty(worksheetTemplate.getSafetyMeasures2())) {
                List<WorksheetTemplateMeasures2> m2List = new ArrayList<>();
                for (WorksheetTemplateMeasures2 m2 : worksheetTemplate.getSafetyMeasures2()) {
                    WorksheetTemplateMeasures2 m2s = new WorksheetTemplateMeasures2();
                    m2s.setId(strId);
                    m2s.setMid(UUID.randomUUID().toString().replace("-", ""));
                    m2s.setWsType(m2.getWsType());
                    m2s.setWsOrder(m2.getWsOrder());
                    m2s.setSafetyMeasures(m2.getSafetyMeasures());

                    m2List.add(m2s);
                }
                log.info("新增工作票模板-子表 安全措施2明细开始>>" + m2List);
                result = worksheetTemplateMeasures2Mapper.insertBatch(m2List);
                log.info("新增工作票模板-子表 安全措施2明细开始<<" + result);
            }
            //插入 工作票模板 安全措施3
            if (!CollectionUtils.isEmpty(worksheetTemplate.getSafetyMeasures3())) {
                List<WorksheetTemplateMeasures3> m3List = new ArrayList<>();
                for (WorksheetTemplateMeasures3 m3 : worksheetTemplate.getSafetyMeasures3()) {
                    WorksheetTemplateMeasures3 m3s = new WorksheetTemplateMeasures3();
                    m3s.setId(strId);
                    m3s.setMid(UUID.randomUUID().toString().replace("-", ""));
                    m3s.setWsType(m3.getWsType());
                    m3s.setWsOrder(m3.getWsOrder());
                    m3s.setSafetyMeasures(m3.getSafetyMeasures());

                    m3List.add(m3s);
                }
                log.info("新增工作票模板-子表 安全措施3明细开始>>" + m3List);
                result = worksheetTemplateMeasures3Mapper.insertBatch(m3List);
                log.info("新增工作票模板-子表 安全措施3明细开始<<" + result);
            }
            //插入 工作票模板 安全措施4
            if (!CollectionUtils.isEmpty(worksheetTemplate.getSafetyMeasures4())) {
                List<WorksheetTemplateMeasures4> m4List = new ArrayList<>();
                for (WorksheetTemplateMeasures4 m4 : worksheetTemplate.getSafetyMeasures4()) {
                    WorksheetTemplateMeasures4 m4s = new WorksheetTemplateMeasures4();
                    m4s.setId(strId);
                    m4s.setMid(UUID.randomUUID().toString().replace("-", ""));
                    m4s.setWsType(m4.getWsType());
                    m4s.setWsOrder(m4.getWsOrder());
                    m4s.setSafetyMeasures(m4.getSafetyMeasures());

                    m4List.add(m4s);
                }
                log.info("新增工作票模板-子表 安全措施4明细开始>>" + m4List);
                result = worksheetTemplateMeasures4Mapper.insertBatch(m4List);
                log.info("新增工作票模板-子表 安全措施4明细开始<<" + result);
            }
            //插入 工作票模板 安全措施5
            if (!CollectionUtils.isEmpty(worksheetTemplate.getSafetyMeasures5())) {
                List<WorksheetTemplateMeasures5> m5List = new ArrayList<>();
                for (WorksheetTemplateMeasures5 m5 : worksheetTemplate.getSafetyMeasures5()) {
                    WorksheetTemplateMeasures5 m5s = new WorksheetTemplateMeasures5();
                    m5s.setId(strId);
                    m5s.setMid(UUID.randomUUID().toString().replace("-", ""));
                    m5s.setWsType(m5.getWsType());
                    m5s.setWsOrder(m5.getWsOrder());
                    m5s.setSafetyMeasures(m5.getSafetyMeasures());

                    m5List.add(m5s);
                }
                log.info("新增工作票模板-子表 安全措施5明细开始>>" + m5List);
                result = worksheetTemplateMeasures5Mapper.insertBatch(m5List);
                log.info("新增工作票模板-子表 安全措施5明细开始<<" + result);
            }
            return AjaxResult.success("工作票模板新增成功：" + strId);

        } catch (Exception e) {
            return AjaxResult.error("工作票新增失败", e);
        }
    }

    @Override
    public AjaxResult delWorksheetTemplate(String id) {
        int result = 0;
        try {
            log.info("删除工作票模板-主表开始>>");
            result = worksheetTemplateMapper.delById(id);
            log.info("删除工作票模板-主表结束<<" + result);

            log.info("删除工作票模板-子表 工作内容开始>>");
            result = worksheetTemplateCxtMapper.delById(id);
            log.info("删除工作票模板-子表 工作内容结束<<" + result);

            log.info("删除工作票模板-子表 安全措施1开始>>");
            result = worksheetTemplateMeasures1Mapper.delById(id);
            log.info("删除工作票模板-子表 安全措施1结束<<" + result);

            log.info("删除工作票模板-子表 安全措施2开始>>");
            result = worksheetTemplateMeasures2Mapper.delById(id);
            log.info("删除工作票模板-子表 安全措施3结束<<" + result);

            log.info("删除工作票模板-子表 安全措施3开始>>");
            result = worksheetTemplateMeasures3Mapper.delById(id);
            log.info("删除工作票模板-子表 安全措施3结束<<" + result);

            log.info("删除工作票模板-子表 安全措施4开始>>");
            result = worksheetTemplateMeasures4Mapper.delById(id);
            log.info("删除工作票模板-子表 安全措施4结束<<" + result);

            log.info("删除工作票模板-子表 安全措施5开始>>");
            result = worksheetTemplateMeasures5Mapper.delById(id);
            log.info("删除工作票模板-子表 安全措施5结束<<" + result);

            return AjaxResult.success("工作票删除成功：" + id);
        } catch (Exception e) {
            return AjaxResult.error("工作票删除失败", e);
        }
    }

    @Override
    public AjaxResult uptWorksheetTemplate(WorksheetTemplate worksheetTemplate) {
        int result = 0;
        try {
            //工作票模板 主表
            log.info("修改工作票模板-主表开始>>");
            result = worksheetTemplateMapper.updateById(worksheetTemplate);
            log.info("修改工作票模板-主表结束<<" + result);

            // 工作票模板 子表 工作内容
            if (!CollectionUtils.isEmpty(worksheetTemplate.getCxt())) {
                log.info("修改工作票模板-工作内容子表开始>>");
                //最好的方式还是先删后插
                worksheetTemplateCxtMapper.delById(worksheetTemplate.getId());
                worksheetTemplateCxtMapper.insertBatch(worksheetTemplate.getCxt());
                log.info("修改工作票模板-工作内容子表结束<<" + result);
            }

            // 工作票模板 子表 安全措施1
            if (!CollectionUtils.isEmpty(worksheetTemplate.getSafetyMeasures1())) {
                log.info("修改工作票模板-安全措施1 子表开始>>");
                //最好的方式还是先删后插
                worksheetTemplateMeasures1Mapper.delById(worksheetTemplate.getId());
                worksheetTemplateMeasures1Mapper.insertBatch(worksheetTemplate.getSafetyMeasures1());
                log.info("修改工作票模板-安全措施1 子表结束<<" + result);
            }
            // 工作票模板 子表 安全措施2
            if (!CollectionUtils.isEmpty(worksheetTemplate.getSafetyMeasures2())) {
                log.info("修改工作票模板-安全措施2 子表开始>>");
                //最好的方式还是先删后插
                worksheetTemplateMeasures2Mapper.delById(worksheetTemplate.getId());
                worksheetTemplateMeasures2Mapper.insertBatch(worksheetTemplate.getSafetyMeasures2());
                log.info("修改工作票模板-安全措施2 子表结束<<" + result);
            }
            // 工作票模板 子表 安全措施3
            if (!CollectionUtils.isEmpty(worksheetTemplate.getSafetyMeasures3())) {
                log.info("修改工作票模板-安全措施3 子表开始>>");
                //最好的方式还是先删后插
                worksheetTemplateMeasures3Mapper.delById(worksheetTemplate.getId());
                worksheetTemplateMeasures3Mapper.insertBatch(worksheetTemplate.getSafetyMeasures3());
                log.info("修改工作票模板-安全措施3 子表结束<<" + result);
            }
            // 工作票模板 子表 安全措施1
            if (!CollectionUtils.isEmpty(worksheetTemplate.getSafetyMeasures4())) {
                log.info("修改工作票模板-安全措施4 子表开始>>");
                //最好的方式还是先删后插
                worksheetTemplateMeasures4Mapper.delById(worksheetTemplate.getId());
                worksheetTemplateMeasures4Mapper.insertBatch(worksheetTemplate.getSafetyMeasures4());
                log.info("修改工作票模板-安全措施4 子表结束<<" + result);
            }
            // 工作票模板 子表 安全措施5
            if (!CollectionUtils.isEmpty(worksheetTemplate.getSafetyMeasures5())) {
                log.info("修改工作票模板-安全措施5 子表开始>>");
                //最好的方式还是先删后插
                worksheetTemplateMeasures5Mapper.delById(worksheetTemplate.getId());
                worksheetTemplateMeasures5Mapper.insertBatch(worksheetTemplate.getSafetyMeasures5());
                log.info("修改工作票模板-安全措施5 子表结束<<" + result);
            }
            return AjaxResult.success("工作票修改成功：" + worksheetTemplate.getId());
        } catch (Exception e) {
            return AjaxResult.error("工作票修改失败", e);
        }
    }

    @Override
    public PageBean queryWorksheetTemplateByPage(String wsType, String deviceCode, String deviceName, String id, String sponsor, String receiver, String approver1, String state, String userId, int pageNum, int pageSize) {
        PageBean pageBean = new PageBean();
        if (pageNum > 0 && pageSize > 0) {
            int totalRecord = worksheetTemplateMapper.getWorksheetTempCount(wsType, deviceCode, deviceName, id, sponsor, receiver, approver1, state, userId);
            pageBean = new PageBean(pageNum, pageSize, totalRecord);

            //从该行开始拿数据
            int startIndex = (pageNum - 1) * pageSize;
            pageBean.setStartIndex(startIndex);
            pageBean.setCode(200);

            //数据集合
            List<WorksheetTemplate> worksheetTemplateList = worksheetTemplateMapper.queryWorksheetTempListByPage(wsType, deviceCode, deviceName, id, sponsor, receiver, approver1, state, userId, startIndex, pageSize);
            pageBean.setList(worksheetTemplateList);
            pageBean.setSuccessMsg("工作票模板查询成功！");
        } else {
            pageBean.setCode(500);
            pageBean.setFailMsg("工作票模板查询失败！");
        }
        return pageBean;
    }
}




